﻿using System.Collections.Generic;
using System.Linq;
using Unijovem.Domain;
using Unijovem.UI.Helpers;
using Unijovem.UI.Models;

namespace Unijovem.UI.Controllers
{
    public class CampoPerfilController : ControllerBase<CampoPerfilModel, CampoPerfil>
    {
        public void PreencherViewBag(int? idGrupo = null, int ? idTipo = null, int? idTipoControle = null)
        {
            PreencherViewBagTipoDados(idTipo);
            PreencherViewBagTipoControle(idTipoControle);
            PreencherViewBagGrupo(idGrupo);
        }

        private void PreencherViewBagGrupo(int? idGrupo = null)
        {
            ViewBag.Grupos = new CampoPerfil().SelecionarGrupo().
                ToSelectList(g => g.Nome, g => g.Id.ToString(), "Grupo", idGrupo.ToString());
        }

        private void PreencherViewBagTipoDados(int? idTipo = null)
        {
            var tipos = new Dictionary<string, string>();

            var enumTipo = CampoPerfilModel.TipoDados.Booleano;
            tipos.Add(((int)enumTipo).ToString(), EnumHelper<CampoPerfilModel.TipoDados>.GetDescription(enumTipo));
            enumTipo = CampoPerfilModel.TipoDados.Data;
            tipos.Add(((int)enumTipo).ToString(), EnumHelper<CampoPerfilModel.TipoDados>.GetDescription(enumTipo));
            enumTipo = CampoPerfilModel.TipoDados.Grupo;
            tipos.Add(((int)enumTipo).ToString(), EnumHelper<CampoPerfilModel.TipoDados>.GetDescription(enumTipo));
            enumTipo = CampoPerfilModel.TipoDados.Numero;
            tipos.Add(((int)enumTipo).ToString(), EnumHelper<CampoPerfilModel.TipoDados>.GetDescription(enumTipo));
            enumTipo = CampoPerfilModel.TipoDados.Texto;
            tipos.Add(((int)enumTipo).ToString(), EnumHelper<CampoPerfilModel.TipoDados>.GetDescription(enumTipo));

            ViewBag.TiposDados = tipos.OrderBy(t => t.Value).ToList().ToSelectList(g => g.Value, g => g.Key, null,
                                                                                   idTipo.ToString());
        }

        private void PreencherViewBagTipoControle(int? idTipoControle = null)
        {
            var tiposControles = new Dictionary<string, string>();

            var enumTipoControle = CampoPerfilModel.TipoControleHtml.CheckBox;
            tiposControles.Add(((int)enumTipoControle).ToString(), enumTipoControle.ToString());
            enumTipoControle = CampoPerfilModel.TipoControleHtml.DropDownList;
            tiposControles.Add(((int)enumTipoControle).ToString(), enumTipoControle.ToString());
            enumTipoControle = CampoPerfilModel.TipoControleHtml.RadioButton;
            tiposControles.Add(((int)enumTipoControle).ToString(), enumTipoControle.ToString());
            enumTipoControle = CampoPerfilModel.TipoControleHtml.TextArea;
            tiposControles.Add(((int)enumTipoControle).ToString(), enumTipoControle.ToString());
            enumTipoControle = CampoPerfilModel.TipoControleHtml.TextBox;
            tiposControles.Add(((int)enumTipoControle).ToString(), enumTipoControle.ToString());

            ViewBag.TiposControles = tiposControles.OrderBy(t => t.Value).ToList().ToSelectList(g => g.Value, g => g.Key, null,
                                                                                   idTipoControle.ToString());
        }
    }
}
